var createError = require('http-errors');    // http错误插件
var express = require('express');  // 全局的express
var path = require('path');  // node 自带 处理路径 
var cookieParser = require('cookie-parser');  // 处理 cookies 编译
var logger = require('morgan'); // 处理日志

// 项目服务启动的主文件  

// 路由模块 
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var apiRouter = require('./routes/api');

var cors = require("cors")

// session
var session = require("express-session")

// 引入链接数据库
require("./utils/connect")
var app = express();  // 获取express所有的属性和方法  

app.use(cors({  // cors解决跨域问题

}))
// view engine setup
app.set('views', path.join(__dirname, 'views'));  // __dirname  根目录  views重置到根目录 ./views/index.ejs  index.ejs 
app.set('view engine', 'ejs');  // 设置 ejs 为模块引擎 

app.use(logger('dev'));    // 记录 dev 开发日志
app.use(express.json());   // post 提交的参数   ajax 提交的post 请求   req.body
app.use(express.urlencoded({ extended: false }));  //  表单提交的POST请求 
app.use(cookieParser());  // 处理cookie 
app.use(express.static(path.join(__dirname, 'public'))); // public 重置到根目录  express.static 静态文件 

app.use(function (req, res, next) {
  console.log("自定义中间件")
  next()  // 进入下一个中间件 
})


// session 中间件
app.use(session({
  secret: '12345',
  name: 'test',
  cookie: { maxAge: 60 * 1000 * 60 * 2 },   // 2h 
  resave: false,
  saveUninitialized: true
}));

// 配置项目的路由 
// app.use("路由的父路径",路由)
app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/api', apiRouter);



// 捕捉异常  404 
app.use(function (req, res, next) {
  next("wh2110-你们的转介绍?")
})

// catch 404 and forward to error handler
app.use(function (msg, req, res, next) {
  console.log(msg)
  next(createError(404));
});

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  // res.render('error'); 
  res.render('error');

});

module.exports = app;
